package main

import (
	"fmt"
	"time"
)

/*
1、select是Go中的一个控制结构，类似于switch语句，用于处理异步IO操作。select会监听case语句中channel的读写操作，
当case中channel读写操作为非阻塞状态（即能读写）时，将会触发相应的动作。

	select中的case语句必须是一个channel操作
	select中的default子句总是可运行的。

2、如果有多个case都可以运行，select会随机公平地选出一个执行，其他不会执行。
3、如果没有可运行的case语句，且有`defaul
*/

/*select {
case <-chan1:
// 如果chan1成功读到数据，则进行该case处理语句
case chan2 <- 1:
// 如果成功向chan2写入数据，则进行该case处理语句
default:
// 如果上面都没有成功，则进入default处理流程
}*/

var chanInt = make(chan int)
var chanStr = make(chan string)

func main() {
	go func() {
		chanInt <- 100
		chanStr <- "Hello World"
		close(chanInt)
		close(chanStr)
	}()
	for {
		select {
		case r := <-chanInt:
			fmt.Printf("chanInt:%v\n", r)
		case r := <-chanStr:
			fmt.Printf("chanStr:%v\n", r)
		default:
			fmt.Println("default...")
		}
		time.Sleep(time.Second)
	}
}
